1:- use_module(library(dcg/basics)).    2
    3string_literal("") --> "\"\"",!.
    4string_literal(S) --> "\"",string_inner(S),"\"",!.
    5string_literal1("") --> "\'\'",!.
    6string_literal1(S) --> "\'",string_inner(S),"\'".
    7string_inner([A]) --> string_inner_(A).
    8string_inner([A|B]) --> string_inner_(A),string_inner(B).
    9string_inner_(A) --> {A="\\\"";A="\\\'"},A;{dif(A,'"'),dif(A,'\''),dif(A,'\n')},[A].
   10
   11ws --> "";blanks.
   12ws_ --> (" ";"\n";"\r";"\t"),blanks.
   13
   14python_ws --> "";python_ws_.
   15python_ws_ --> (" ";"\t"),python_ws.
   16
   17symbol([L|Ls]) --> letter(L), symbol_r(Ls).
   18symbol_r([L|Ls]) --> csym(L), symbol_r(Ls).
   19symbol_r([])     --> [].
   20letter(Let)     --> [Let], { code_type(Let, alpha) }.
   21csym(Let)     --> [Let], {code_type(Let, csym)}.
   22
   23a_double(A) --> a_double_(A).
   24a_double([-A]) --> "-",a_double_(A).
   25a_double_([A,['0']]) -->
   26        (an_int(A)).
   27a_double_([A,B]) -->
   28        (an_int(A), ".",!, an_int(B)).
   29an_int([L|Ls]) --> digit(L), an_int_r(Ls).
   30an_int_r([L|Ls]) --> digit(L), an_int_r(Ls).
   31an_int_r([])     --> []